#include<iostream>
#include<cstring>
using namespace std;
 /* 阿福是一名经验丰富的大盗。趁着月黑风高，阿福打算今晚洗劫一条街上的店铺。

这条街上一共有 N 家店铺，每家店中都有一些现金。

阿福事先调查得知，只有当他同时洗劫了两家相邻的店铺时，街上的报警系统才会启动，然后警察就会蜂拥而至。

作为一向谨慎作案的大盗，阿福不愿意冒着被警察追捕的风险行窃。

他想知道，在不惊动警察的情况下，他今晚最多可以得到多少现金？ 
输入格式
输入的第一行是一个整数 T，表示一共有 T 组数据。

接下来的每组数据，第一行是一个整数 N ，表示一共有 N 家店铺。

第二行是 N 个被空格分开的正整数，表示每一家店铺中的现金数量。

每家店铺中的现金数量均不超过1000。

输出格式
对于每组数据，输出一行。

该行包含一个整数，表示阿福在不惊动警察的情况下可以得到的现金数量。

数据范围
1≤T≤50,
1≤N≤1e5 */
const int N=1e5+10;
int n;
int t;
int a[N];
int mem[N];
int ans;
// 暴力搜索（超时）
int dfs(int x)
{
    if(x>n)return 0;
    
    return max(dfs(x+1),dfs(x+2)+a[x]);
}
//记忆化搜索
int memdfs(int x)
{
    if(mem[x])return mem[x];
    int sum=0;
    if(x>n)return 0;
    else
    {
        sum=max(dfs(x+1),dfs(x+2)+a[x]);

    }
    mem[x]=sum;
    return sum;
}
//dp 从下往上推导 就是dfs后回溯的方式

int dp()
{
    int f[1010]={0};
  for(int i=n;i>=1;i--)
  {
    f[i]=max(f[i+1],f[i+2]+a[i]);
  }
 return f[1];
}
int main()
{
cin>>t;
while(t--)
{
    cin>>n;
    for(int i=1;i<=n;i++)cin>>a[i];
    //记忆化搜索
   /*  memset(mem,0,sizeof(mem));
    int ans=memdfs(1);
    cout<<ans; */
    //dp
    int ans=dp();
    cout<<ans;
}
    return 0;
}